package cn.stylefeng.guns.modular.gridsystem.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.guns.core.exception.ServiceException;
import cn.stylefeng.guns.core.factory.PageFactory;
import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.modular.gridsystem.entity.BizFosInfo;
import cn.stylefeng.guns.modular.gridsystem.enums.BizFosInfoExceptionEnum;
import cn.stylefeng.guns.modular.gridsystem.mapper.BizFosInfoMapper;
import cn.stylefeng.guns.modular.gridsystem.model.param.BizFosInfoParam;
import cn.stylefeng.guns.modular.gridsystem.service.BizFosInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 光纤传感器信息 服务实现类
 *
 * @author ssy
 * @date 2023/02/03 09:53
 */
@Service
public class BizFosInfoServiceImpl extends ServiceImpl<BizFosInfoMapper, BizFosInfo> implements BizFosInfoService {

    /**
     * 分页查询光纤传感器信息
     *
     * @param bizFosInfoParam
     * @return
     */
    @Override
    public PageResult<BizFosInfo> page(BizFosInfoParam bizFosInfoParam) {
        // 构造条件
        LambdaQueryWrapper<BizFosInfo> queryWrapper = new LambdaQueryWrapper<>();
        // 查询分页结果
        return new PageResult<>(this.page(PageFactory.defaultPage(), queryWrapper));
    }

    /**
     * 查询所有光纤传感器信息
     *
     * @param bizFosInfoParam
     * @return
     */
    @Override
    public List<BizFosInfo> list(BizFosInfoParam bizFosInfoParam) {
        // 构造条件
        LambdaQueryWrapper<BizFosInfo> queryWrapper = new LambdaQueryWrapper<>();
        return this.list(queryWrapper);
    }

    /**
     * 添加光纤传感器信息
     *
     * @param bizFosInfoParam
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void add(BizFosInfoParam bizFosInfoParam) {
        // 将dto转为实体
        BizFosInfo bizFosInfo = new BizFosInfo();
        BeanUtil.copyProperties(bizFosInfoParam, bizFosInfo);
        this.save(bizFosInfo);
    }

    /**
     * 删除光纤传感器信息
     *
     * @param bizFosInfoParam
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(BizFosInfoParam bizFosInfoParam) {
        this.removeById(bizFosInfoParam.getId());
    }

    /**
     * 编辑光纤传感器信息
     *
     * @param bizFosInfoParam
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void edit(BizFosInfoParam bizFosInfoParam) {
        // 根据id查询实体
        BizFosInfo bizFosInfo = this.queryBizFosInfo(bizFosInfoParam);
        // 请求参数转化为实体
        BeanUtil.copyProperties(bizFosInfoParam, bizFosInfo);
        this.updateById(bizFosInfo);
    }


    /**
     * 查看详情光纤传感器信息
     *
     * @param bizFosInfoParam
     * @return
     */
    @Override
    public BizFosInfo detail(BizFosInfoParam bizFosInfoParam) {
        return this.queryBizFosInfo(bizFosInfoParam);
    }


    /**
     * 获取光纤传感器信息
     *
     * @author ssy
     * @since 2023/02/03 09:53
     */
    private BizFosInfo queryBizFosInfo(BizFosInfoParam bizFosInfoParam) {
        BizFosInfo bizFosInfo = this.getById(bizFosInfoParam.getId());
        if (ObjectUtil.isEmpty(bizFosInfo)) {
            throw new ServiceException(BizFosInfoExceptionEnum.NOT_EXISTED);
        }
        return bizFosInfo;
    }
}
